package com.zby.scms.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zby.scms.entity.College;
import com.zby.scms.entity.User;
import com.zby.scms.service.CollegeService;
import com.zby.scms.service.UserService;
import com.zby.scms.utils.BaseResult;
import com.zby.scms.utils.ResultUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

/**
 * 用户实体(User)表控制层
 *
 * @author zhangboyi
 * @since 2019-12-31 19:02:44
 */
@Api(tags = "用户实体(User)") 
@RestController
@RequestMapping("user")
public class UserController {
    /**
     * 服务对象
     */
    @Autowired
    private UserService userService;
    @Autowired
    private CollegeService collegeService;
    private Logger logger = LoggerFactory.getLogger(UserController.class);





    /**
     * 需要传入一个参数查询(admin)
     * 要结合多表查询
     * */
/*    @ApiOperation(value = "查询用户信息(角色、学院、系、专业)")
    @GetMapping("findByItems")
    public BaseResult<List<College>> findByItem(College college){
        return ResultUtil.success(collegeService.queryAll(college));
    }*/



    /**
     * 修改个人信息（普通用户）
     * */
/*    @ApiOperation(value = "修改个人信息")
    @PostMapping("updateByUserId")
    public User updateByUserId(@ApiParam("学号") @PathVariable("userid") String userid){

        return null;
    }*/










    /*
    * 系统管理员
    *
    * */

    /*添加用户：批量添加|单个添加*/
    /**
     * 添加用户（admin)
     * */
    @ApiOperation(value = "添加用户")
    @PostMapping("addUser")
    public User addUser(User user){
        return userService.insert(user);
    }

    /**
     * 批量添加用户（admin)
     * */
/*    @ApiOperation(value = "批量添加用户")
    @PostMapping("addUsers")
    public List<User> addUsers(List<User> users){
        return users;
    }*/




    /*查询用户：按角色|按学院|按系|按专业--页码参数（可以不做）*/

    @GetMapping("findAll")//需要传入页码参数
    public BaseResult<List<User>> findAll(User user) {
        return ResultUtil.success(userService.findAll(user));
    }

    @GetMapping("queryAllByLimit")//需要传入页码参数
    public BaseResult<List<User>> queryAllByLimit(User user,Integer pageNum, Integer pageSize) {
        if (pageNum == null||pageSize == null){
            logger.info("请求的参数不能为空");
            return ResultUtil.error(400, "请求的参数不能为空");
        }
        PageHelper.startPage(pageNum, pageSize);
        PageInfo<User> pageInfo = new PageInfo<>(userService.findAll(user));

//        logger.info(pageInfo.toString());
//        logger.info(pageInfo.getClass().toString());

        return ResultUtil.success(
                pageInfo.getList(),
                pageInfo.getPageNum(),
                pageInfo.getPageSize(),
                pageInfo.getTotal());
//        return pageInfo;
    }

    /*修改用户信息：全部信息|全部用户|分配角色|修改账号状态*/

    /**
     * 更改用户状态（admin)
     * */
    @ApiOperation(value = "更改用户状态（status=0/1：禁用/启用")
    @PutMapping("updateStatus")
    public BaseResult updateStatus(
            @ApiParam(value = " 用户id")
                    String userid,
            @ApiParam(value = " 状态")
                    Integer ustatus){
//       int status2 = status ? 1:0;
        if(userService.updateByuserId(userid,ustatus)!=1){
            return ResultUtil.error("更新用户状态失败");
        }
        return ResultUtil.success();
    }

    /*
     * 普通用户
     *
     * */


    /*修改个人信息：分配角色、更改状态除外*/

    /**
     * 修改个人信息（普通用户）
     * */
    @ApiOperation(value = "修改个人信息")
    @PutMapping("update")
    public User update(User user){

        return userService.update(user);
    }


    /*查看个人信息：根据登录的用户id*/
    /**
     * 通过主键查询单条数据
     *
     * @param userid 主键
     * @return 单条数据
     */
    @ApiOperation(value = "根据id查询 用户实体")
    @GetMapping("selectOne/{userid}")
    public BaseResult<User> selectOne(
            @ApiParam(value = "学号/工号 ID")
            @PathVariable String userid) {
        return ResultUtil.success(this.userService.queryById(userid));
    }












}